home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Linux Cubed Series 7: Sunsite
/
Linux Cubed Series 7 - Sunsite Vol 1.iso
/
system
/
shells
/
scsh-0.4
/
scsh-0
/
scsh-0.4.2
/
bcomp
/
undefined.scm
< prev
next >
Wrap
Text File
|
1995-10-13
|
2KB
|
57 lines
; Copyright (c) 1993, 1994 Richard Kelsey and Jonathan Rees. See file COPYING.
; Added really-noting-undefined-variables proc, which gives you noise control.
; -Olin 6/95.
; Maintain and display a list of undefined names.
(define $note-undefined (make-fluid #f))
(define (note-undefined! p name)
(let ((note (fluid $note-undefined)))
(if note (note p name))))
(define (noting-undefined-variables p thunk)
(really-noting-undefined-variables p (current-output-port) thunk))
(define (really-noting-undefined-variables p noise thunk)
(let* ((losers '())
(foo (lambda (env name)
(let ((probe (assq env losers)))
(if probe
(if (not (member name (cdr probe)))
(set-cdr! probe (cons name (cdr probe))))
(set! losers (cons (list env name) losers)))))))
(let-fluid $note-undefined (lambda (p name)
(if (generated? name)
(foo (generated-env name)
(generated-symbol name))
(foo p name)))
(lambda ()
(dynamic-wind
(lambda () #f)
thunk
(lambda ()
(for-each (lambda (p+names)
(let* ((env (car p+names))
;; Keep the ones that are still unbound:
(names (filter (lambda (nm)
(unbound? (generic-lookup env nm)))
(cdr p+names))))
(cond ((and (not (null? names)) noise)
(display "Undefined" noise)
(if (and p (not (eq? env p)))
(begin (display " in " noise)
(write (car p+names) noise)))
(display ": " noise)
(write (map (lambda (name)
(if (generated? name)
(generated-symbol name)
name))
(reverse names))
noise)
(newline noise)))))
losers)))))))